#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

/*

顺序表，全名顺序存储结构，是线性表的一种

顺序表存储数据时，会提前申请一块足够大小的内存，然后将数据依次
存储起来，存储时做到数据元素之间不留一丝缝隙
1、要申请足够大小的内存
2、申请的存储容量
3、存储数据元素的个数

*/

typedef struct
{
	int* head;  //指针，存申请的内存的首地址
	int length; //当前数据个数
	int size;   //元素个数（最大容量）
}Table;


Table initTable()
{
	Table t;
	//1、记录最大容量
	t.size=5;
	//2、记录数据个数
	t.length=0;
	//3、申请内存
	t.head=(int*)calloc(t.size,sizeof(int));
	if(!t.head)
	{
		printf("申请内存失败！程序终止！\n");
		exit(0);
	}

	return t;

}

void inputTable(Table* p,int num)
{
    if(num<1)
    {
        printf("长度错误！\n");
    }
    else if(num<=(*p).size)
    {
        for(int i=0;i<num;i++)
        {
            scanf("%d",(*p).head+i);
            (*p).length++;
        }
    }
    else
    {
        //扩容
    }

}

void displayTable(Table table)
{
    printf("\n");
    printf("size:%d ",table.size);
	printf("length:%d ",table.length);
	printf("head:%X\n",table.head);
    for(int i=0;i<table.length;i++)
	{
		//printf("%d ",*(table.head++));
        printf("%d ",table.head[i]);
	}
    printf("\n");
}


int main()
{
	Table myTab=initTable();
	printf("MyTab.size:%d\n",myTab.size);
	printf("MyTab.length:%d\n",myTab.length);
	printf("MyTab.head:%X\n",myTab.head);

    /*
	for(int i=0;i<3;i++)
	{
		myTab.head[i]=10+i;
        myTab.length++;
	}
    */

    inputTable(&myTab,6);

    displayTable(myTab);



	system("pause");
	return 0;
} 